package menu

import (
	"mldong/internal/modules/sys/entity"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
)

// sys_menu 菜单
type MenuVO struct {
	entity.Menu
	Children []*MenuVO `json:"children" dc:"子菜单"`
}

// 实现 TreeNode 接口
func (d *MenuVO) GetId() *string       { return d.ID }
func (d *MenuVO) GetParentId() *string { return d.ParentId }
func (d *MenuVO) GetName() *string     { return d.Name }
func (d *MenuVO) GetSort() *string     { return d.Sort }

// 直接返回 *MenuVO 列表
func (d *MenuVO) GetChildren() []*MenuVO {
	return d.Children
}

// 直接接收 *MenuVO 列表
func (d *MenuVO) SetChildren(nodes []*MenuVO) {
	d.Children = nodes
}

type RouteMenuVO struct {
	ID        *string        `json:"-" dc:"菜单ID"`
	ParentId  *string        `json:"-" dc:"父ID"`
	Name      *string        `json:"name,omitempty" dc:"菜单名称"`
	Path      *string        `json:"path,omitempty" dc:"路由地址"`
	Redirect  *string        `json:"redirect,omitempty" dc:"跳转地址"`
	Component *string        `json:"component,omitempty" dc:"组件地址"`
	Meta      g.Map          `json:"meta,omitempty" dc:"元数据"`
	Children  []*RouteMenuVO `json:"children,omitempty" dc:"子菜单"`
}

// 实现 TreeNode 接口
func (d *RouteMenuVO) GetId() *string       { return d.ID }
func (d *RouteMenuVO) GetParentId() *string { return d.ParentId }
func (d *RouteMenuVO) GetName() *string     { return d.Name }
func (d *RouteMenuVO) GetSort() *string {
	order := "9999999999999"
	if d.Meta == nil {
		return &order
	}
	if d.Meta["order"] == nil {
		return &order
	}
	order = gconv.String(d.Meta["order"])
	return &order
}

// 直接返回 *RouteMenuVO 列表
func (d *RouteMenuVO) GetChildren() []*RouteMenuVO {
	return d.Children
}

// 直接接收 *RouteMenuVO 列表
func (d *RouteMenuVO) SetChildren(nodes []*RouteMenuVO) {
	d.Children = nodes
}
